tg-me.com/mobileproglib/5878
Last Update:
Рассмотрим 5 недооцененных или малоизвестных трюков с пользовательским интерфейсом в Jetpack Compose, которые помогут вам создавать более эффективные, красивые и удобные в обслуживании пользовательские интерфейсы.
Вместо того чтобы переключать видимость с помощью if (visible) Box {}
, вы можете использовать AnimatedVisibility для чистой анимации входа и выхода.
AnimatedVisibility(
visible = showDetails,
enter = fadeIn() + slideInVertically(),
exit = fadeOut() + slideOutVertically()
) {
Text("Here's a smooth transition")
}
Почему это важно: это избавляет от необходимости ручной обработки анимации и мгновенно улучшает UX.
Иногда стандартных
Row
, Column
и Box
недостаточно. Тогда на помощь приходит модификатор Modifier.layout
.Modifier.layout { measurable, constraints ->
val placeable = measurable.measure(constraints)
layout(placeable.width, placeable.height) {
// Flip layout horizontally
placeable.placeRelative(-placeable.width, 0)
}
}
Пример использования: создание зеркальных макетов, переворачивание компонентов или нестандартное расположение UI.
LazyColumn
Хотите вставить разделитель или пробел между каждым элементом?
LazyColumn {
itemsIndexed(items) { index, item ->
Text(item)
if (index != items.lastIndex) {
Divider()
}
}
}
Бонус: вы можете не ограничиваться разделителями, а вставлять между рядами рекламу, советы или информационный контент.
drawBehind
для расширения фонового рисунка за пределы границФункция
drawBehind
позволяет рисовать за макетом компонента, игнорируя отступы или даже рисуя за пределами границ.Modifier
.padding(16.dp)
.drawBehind {
drawRect(Color.Gray)
}
Пример: добавьте тень или градиентный фон, выходящий за границы содержимого.
stickyHeader
Jetpack Compose имеет нативную поддержку «липких» заголовков:
LazyColumn {
stickyHeader {
Text(
"Section Title",
modifier = Modifier.background(Color.White)
)
}
items(data) {
Text(it)
}
}
Отлично подходит для: групповых списков (например, контакты A-Z), разделов чата по дате и т.д.
Делитесь в комментариях лайфхаками, которыми вы пользуетесь
#буст